package quarto.view.server;

import java.util.Scanner;
import quarto.Message;
import quarto.controller.server.Server;

/**
 * Textuele user interface voor de server
 * @knows
 * - De server
 * @does
 * - Textuele representatie van de servertoestand weergeven
 * @author Frank Borgonjen & Tim Smit
 */
public class ServerTUI implements ServerUI
{
    /** het poort nummer */
    private int portNumber;
    
    /** de server */
    private Server server;

    /**
     * Start van het programma, maakt een serverTUI aan
     * @param args
     */
    public static void main(String[] args)
    {
        new ServerTUI();
    }

    /**
     * Construeert een ServerTUI
     */
    public ServerTUI()
    {
        this.portNumber = -1;
        
        do
        {
            this.askForConnect();

            // start de server
            this.server = new Server(this.portNumber, this);
            this.server.start();
            
            try
            {
                Thread.sleep(500);
            }
            catch (InterruptedException ex) {}
        }
        while (!this.server.connected());
    }
    
    /**
     * Vraagt de gebruiker om het poort nummer in de vullen
     */
    private void askForConnect()
    {
        Scanner input = new Scanner(System.in);
        String portnumber;
        
        // vragen naar het te gebruiken poortnummer
        do 
        {
            System.out.println(Message.SERVERTUI_QUESTION_PORT + "? \n> ");
            portnumber = input.hasNextLine() ? input.nextLine() : null;
            
            try
            {
                this.portNumber = Integer.parseInt(portnumber);
            }
            // ongeldig poortnummer
            catch (NumberFormatException e)
            {
                this.portNumber = -1;
                this.errorMessage(String.format(Message.ERROR_INVALID_PORT, portnumber));
            }
        }
        while (portnumber == null || this.portNumber == -1);
    }

    /**
     * Voegt een statusbericht toe
     * @param msg het bericht dat toegevoegd moet worden
     */
    public void addMessage(String msg)
    {
        System.out.println("> " + msg);
    }
    
    /**
     * Geeft een foutmelding weer
     * @param msg de foutmelding
     */
    public void errorMessage(String msg)
    {
        this.addMessage("[ERROR] " + msg);
    }
}
